5) Arduinoの、お勉強
Arduinoについては、SUNFOUNDERと言うところが出しているArduino Uno互換製品を使って、ソフト・ハードについてお勉強中です。Youtube上にも沢山動画があります。自分としては直流モーター、もしくは、ステッピングモーターにて3軸制御なんてやってみたいなと。 できるかな???(^^;
Youtubeでは、十数項目に亘って、それぞれのセンサーや、モーターの設定、プログラミングと実際の動作が確認できます。個人的には「なかしーさん」の動画をよく見ます。
Arduinoを始める切っ掛けはやはりYoutubeの動画で「トボリさん」が投稿していた動画を見てからでした。「お、ジジイにもできるか???」と、思っちゃいました。
実際に、ブレッドボードで回路を作って、Lチカやら何やらと、やってみました。比較的、操作は簡単でしたが、記述を覚えるのが・・・。がんばります!!
上の画像に写っているクリアケースは、100均で売っていたものを使ってます。ボード固定用のプラネジはホームセンターです。
(1)Lチカ
Lチカとは、LEDのチカチカと点滅する様子を示します。1秒間隔で点滅を繰り返します。サンプルプログラムとして用意してあります。 以下、「Lチカ」の動画を張ってあります。ダウンロードからどうぞ!! (^^;
**) 以降、動画のダウンロードについては、aviファイルが展開できる環境を構築の上、動画をダウンロードしてください。スマホでご覧になる場合、例えば、VLC for android アプリ等を事前にインストールしてください。aviファイルが展開できれば、どれでもよいと思います。よろしく!!(^^”
(2)押しボタンスイッチ押下にてLEDを点灯
スイッチからの入力情報をArduinoが受け取って、ArduinoがLEDへの電源供給のON/OFFを選択しています。
(3)明るさを測定する
CDSセル(フォトレジスタとも言う)を使って、抵抗値のアナログ変化を電圧変化としてArduinoに取り込み、電圧のアナログ変化を数値化してArduino IDE上でこの数値を確認します。
CDS ライト照射
CDS 室内灯下
CDS 指先にて遮光
(4)距離を測定する
超音波センサ(HC-SR04)にて、Arduinoにデータを取り込み、それをパソコンへ送信して、ArduinoIDEにて確認します。測定範囲は2cmから400cmまでです。
センサから測定物までの距離29cm
センサから測定物までの距離15cm
センサから測定物までの距離5cm
(5)LCDに文字・数字・記号を表示させる
実際にArduinoへ配線を行い、いくつかの表示パターンをお見せします。
実際には上の写真のArduinoにPCからUSBケーブルが繋がります。PC上でArduinoIDEを起動して、プログラムを作ってコンパイルした後、Arduino本体に書き込みます。以下、いくつかのプログラムの書き込みを行い、動作確認をしていますので、ご覧ください。
以上の、プログラムのサンプルを画像としてUPします。
カーソルが点滅する
表示パターンが点滅する
表示文字列全体が点滅する
文字列が右から左へ移動する
文字列が左から右へ移動する
右から左へabc・pと表示する
左から右へabc・pと表示する
次回は、LCDと他のセンサを組み合わせてみます。
(6) 温湿度センサを使って、LCDに温度・湿度を表示させ、PCへデータを送る
温湿度センサDHT11を使って、温度・湿度を10秒間隔で測定し、PCへの送信とLCDへの表示をさせてみました。
(動画は3秒間隔です)
PCへの送信
LCDの表示
(7) 赤外線センサを使って、LCDに値を表示させ、PCへデータを送る
下の画像のセットにて動作確認を行います。(動画の方がよく判りますので、動画をご覧ください。)
Arduino/ブレッドボード/信号送信用リモコン
リモコン送信時の赤外線センサボードの状態
(8) 7SEGーLEDを使ってみる (1)
74HC595(8ビットシフトレジスタ)を使って、数字の0から9までと、ドットを順次表示させます。
7SEGーLEDを使ってみる (2)
7SEGーLEDを使ってみる(1)ではシフトレジスタを使用しましたが、今回は使用しません。7SEGが2個ありますが1個は未配線です。(7SEG右側)後、7SEG用に7本しか配線していません。D.Pは配線していません。
(9) 4桁7SEGーLEDを使ってみる(1) (ダイナミック点灯)
4個の7SEGの点灯時間を短くすると、すべて点灯しているように見えます。
7SEGーLEDを2個使ってみる(2) (ダイナミック点灯&シフトレジスタ未使用)
表示データの出力タイミングと7SEGドライブ用トランジスタの動作タイミングを合わせなくてはなりません。
(10) サーボモータ (SG90)の制御
サーボモータ(SG90)を、設定角度への軸移動、0度から180度の間を軸SWEEP、ポテンショメータを使用して任意の角度へ軸移動と3パターンで動作確認をします。
(11) DCモータの制御 (1)
DCモータの正転・逆転・速度制御を行ってみます。(PWM制御です)
DCモータの制御はArduino IDEのシリアルモニタを開いて、PCのテンキー入力にて正転・逆転・スピードを変えています。
スピードの変化を風量の変化と捉え、動画を撮ってます。(^^;
DCモータの制御 (2)
DCモータの制御は、ポテンショメータの変化をArduinoへ入力し、それをトランジスタを介してモーターを制御してます。
ポテンショメータの両端を電源とGNDへ接続、センタータップをArduinoのアナログ入力へ接続します。
出力はArduinoのPWM出力から、NPNトランジスタの(B)へ1kΩの抵抗を介して接続、(E)はGNDへ接続、(C)はモーターの片側(-側)を接続、もう一方を電源(+)へ接続してます。
プログラムの記述は、analogRead()、analogWrite()のみです。VOID SETUP(){}は使用しませんが、記述として必要です。これを消去するとコンパイルエラーとなるようです。(VOID SETUP(){}は必要ですが、設定の中身({}の中身)は、今回は記述無しです)
(12) ステッピングモータの制御
ステッピングモータの励磁方法(1相励磁・2相励磁・1-2相励磁:これらはライブラリ不使用)による動作確認と、ライブラリ使用時の動作確認を行います。また、ライブラリ使用時は、2相励磁のみとなります。動作速度はライブラリ」不使用時は遅く設定できてますが、ライブラリ使用時の動作速度は、1分間の回転数(rpm)入力であり、尚且つ、整数のみ入力可となっており、現状の動作速度はライブラリ使用時はライブラリ不使用時より速くなってます。ライブラリの内部が触れない以上、遅くすることはできません。
(13) 赤外線通信を利用した、ステッピングモータの回転制御
リモコンの早送りボタンと巻き戻しボタンを使用して、90度ずつ正転、90度ずつ反転します。ステッピングモータドライバのLEDが消灯しないと、次の動作には移れません。
(14) メンブレンスイッチ(シートキースイッチ)の、シリアル通信による動作確認
動作確認の方法ですが、Arduino IDEを起動してソフトをコンパイル、書き込みを行った後、シリアルモニタを起動します。
モニタが起動出来たら、後はメンブレンスイッチをそれぞれ押下していきます。スイッチを押下する度に、モニタに押されたスイッチの場所の
数字・アルファベット・記号が表示されます。
(15) 水位センサの、シリアル通信による動作確認
こちらの動作確認も、Arduino IDEのシリアルモニタを使用します。水位センサを水に浸す前は、シリアルモニタの数値は”0”です。
センサを水の中に入れて行くに従って、モニタの数値が上昇します。
(16) 6軸モーションセンサの動作確認
写真のブレッドボードに載っているモジュールが、MPU-6050 使用の3軸ジャイロスコープ・3軸加速度センサ モジュールになります。
ブレッドボードを前後、左右に30度以上傾けた時に、下がっている方向のLEDが点灯します。(傾斜を30度で設定しています)
(17) 8ビットシフトレジスタ(74HC595)を使用した、複数の(8個)LED点灯回路の動作確認
74HC595を使用したLED点灯制御回路です。以下に、二通りの例を紹介します。
一つ目は、緑のLEDの左端から一つずつ点灯して白のLEDの右端まで点灯します。すべて点灯したら全消灯して、
再び同じ動作を繰り返します。
二つ目は、緑のLEDの左端が点灯、これを消灯して右隣の緑のLEDを点灯、・・・これを繰り返して右端の白のLEDが点灯。
白のLEDの右端を消灯して左隣の白のLEDを点灯、・・・これを繰り返して左端の緑のLEDが点灯。これを繰り返します。
(18) リアルタイムクロック(RTC:DS1307/I2C通信仕様)を使用した、カレンダー/時計機能の動作確認
・DS1307用ライブラリ(DS3231ライブラリ)使用
・DS1307用ライブラリ 未使用
(19) リアルタイムクロック(RTC:DS1302)を使用した、カレンダー/時計機能の動作確認
・DS1302用ライブラリ使用
・DS1302用ライブラリ未使用
(20) リアルタイムクロック(RTC:DS1302)、4桁7SEG-LED、74HC595(8ビットシフトレジスタ)を使用した時計機能の動作確認(画像のみ)
(21) リアルタイムクロック(RTC:DS1302)と、LCD(1602:I2C無し)を使用した、カレンダー/時計機能の動作確認
・DS1302用ライブラリ未使用
・DS1302用ライブラリ使用
ライブラリを使用すると、記述自体は少なく済みますが、表示はライブラリに依存します。
表示方法を変更するには、ライブラリの変更が伴います。(.cpp/.hファイル等の記述の変更が必要)
また、ライブラリは、各人が好きなように記述して公開しています。
例えば、DS1302の場合、Rinky-Dink Electronicsと言うところが公開、もう一つは、msparksと言うところが公開しています。
探せば、他にもあると思います。使い方には違いがあります。上の2つは、Aruduino IDE表示は、include<DS1302.h>と、
同じですが、今回のLCD表示にはmsparksのライブラリでないとコンパイルできません。
また、Aruduino IDEでのinclude<DS1302.h>の表示文字色ですが、Rinky-Dink Electronicsが深緑色、msparksがオレンジ色でした。
詳しくは、確認していませんが、文字色の違いの意味も当然あると思っています。
(22) サーミスタによる室温測定と、サーミスタの抵抗値の変化を確認
写真中、ブレッドボード右上の小さな黒い粒状の素子がサーミスタです。 ↑サーミスタは、矢印の上です。
(23) LEDマトリクス(MAX7219)の制御
MAX7219が、手元に1つしかな無いので、文字(アルファベット:Aruduino)を1つずつ表示させてます。
(24) RFID-RC522モジュールを使用した、RFIDカード,RFIDタグのデータの読み取り確認(RFID:無線通信識別子)
Arduino IDEのシリアルモニタにて、データの読み取り確認を行いました。
・RFIDカードのデータ(白色の長方形のカード)
・RFIDタグのデータ(青色のキーホルダ状の物)
カード、タグ共に、UIDと同様のデータが、それぞれのデータの最終行の始めに出てきました。
(25) 6軸モーションセンサの動作確認 (2)
前回は、(16) 6軸モーションセンサの動作確認 にて、Ⅹ軸(ROLL角)とY軸(PITCH角)の動作確認を、LEDのみで行っていましたが、今回は、Z軸(YAW角)の追加、シリアルモニタでのデータ確認、LED点灯角度±5度設定で検証しました。検証と言っても精度の測定は現状、困難なので、ざっくり目安程度です。シリアルモニタでの確認になります。(^^;
以下写真が検証用ボードです。赤色LEDがX軸(ROLL角)、黄色LEDがY軸(PITCH角)、そして緑色LEDが今回追加のZ軸LED(YAW角)です。LEDの点灯はX,Y軸が前回同様、ボードを傾けて角度が低い方のLEDが点灯します。Z軸は正転・逆転で±5度付近で点灯します。(^^;
(26) ステッピングモータの制御 (2)
今回は、前回の(12) ステッピングモータの制御 の、続きとなります。前回はライブラリを使用しないで、1相励磁・1-2相励磁・2相励磁の動作確認、ライブラリを使用した2相励磁の動作確認をしました。ライブラリは既存のものでした。今回はこのライブラリを修正・再構築して1相励磁・1-2相励磁のライブラリを作成し、ドライバモジュールのLEDにて動作確認を行ないました。また、既存のライブラリでは、ドライバモジュールのLEDの点灯速度が速く、視認が困難でしたが、今回のライブラリの修正・再構築にてLEDの点灯速度も低くできるよう設定しました。(^^;
1相励磁(ライブラリ仕様) 低速
1相励磁(ライブラリ仕様) 高速
1相励磁(ライブラリ仕様)インクルード (Stepper1so.h)
1-2相励磁(ライブラリ仕様) 低速
1-2相励磁(ライブラリ仕様) 高速
1-2相励磁(ライブラリ仕様)インクルード (Stepper12so.h)
1相励磁 高速の動画と、1-2相励磁 高速の違いは判るでしょうか? 1相励磁・2相励磁は1回転に必要なステップ数が2048で、1-2相励磁は2倍の4096となります。当初、1相励磁・2相励磁ではモーターの出力軸を90度回転させて。一度停止させて再び動作させるよう設定されてます。なので1相励磁も同様、90度動いて停止を繰り返しています。一方、1-2相励磁も当初の90度動いて停止を繰り返す設定のままとしていますが、1回転の動作ステップが2倍の4096となっているため、90度ではなく、45度動いて停止を繰り返しています。1相励磁・2相励磁と同様90度動いて停止をくりかえすには、90度動かす部分の数値を2倍にする必要があります。(^^;
(26) 6軸モーションセンサの動作確認 (3)
今回は、6軸モーションセンサの動作確認 (2) の続きです。前回は角度を大きく設定していません。理由は、Arduino Unoと、センサーボードが別々となっていて、センサーボードを傾けた際、ジャンパー線の接触不良が多発した経緯があり、角度を小さく設定していました。今回は、1枚のブレッドボード上にUnoではなく、Nanoを実装しセンサーと一体としました。これにより、ジャンパー線の接触不良が大幅に低減でき、角度を大きく設定することができるようになりました。また、角度をある程度固定するためにダンボールにてブロックを制作しました(笑)(^^;
Nano実装センサーボード (平面設置)
センサーボード (平面設置データ)
角度固定用段ボールブロック (30度傾斜)
X軸 ROLL角
Y軸 PITCH角
Z軸 YEW角
現在、精度の確認まではできていません。ただ、表示データとしては1/100でのデータ表示が可能なようです。
(27) GPSモジュール単体の動作確認
今回は、GPSモジュール「GYSFDMAXB」を使用して、簡単な動作確認を行ないました。写真右がUARTモジュールで、左がGPSモジュールです。
GPSモジュール(左) 赤色LED強弱点灯
GPSモジュールをUARTモジュールを介して接続しています。GPSモジュールが正常に動作していれば、赤色LEDが強弱点灯します。
GPSモジュール 動作確認(PC上)
PC上で付属(?)の「MINI GPS」ソフトを起動すると写真の表示となりました。緯度・経度も表示できました。写真ではこれらは消してあります。個人情報になりますので。
モジュールの位置を変えると、緯度・経度も変わりました。
次回は、WIFIモジュールの動作確認を行なう予定です。
(28) WiFiモジュール?(ESPr Developer<<ESP8266EX>>搭載)の動作確認
以下、ソフトを走らせた結果となります。
以下情報は、Ambient送信情報が含まれます。WiFiのみの動作として見る場合は、Server startedまでを、WiFiの動作として見てください。
また、動画としてLEDの点灯状態をUPしていますが、LEDの点灯開始は使用しているソフトウェアシリアルの動作開始を意味しています。
ESPr Developerをリセットしてから、WiFiの接続までしばらく待ちます。(笑)
(29) GPSロガーの動作確認
GPSモジュールと、WiFiモジュール?(ESPr Developer<ESP8266EX>搭載)の接続と、Ambientへのデータ送信・動作確認を行ないました。
次の画像の Server started 以降の9.70の数値以下が、Ambientへの送信データとなります。9.70は海抜を示します。誤差が激しいです。
9.70のすぐ下のデータは緯度の情報が入ります。そしてその下には経度の情報が入ります。個人情報となりますので消してます。
2回程、データの取得ができてます。データの取得方法は、ブレッドボード上の押し釦スイッチを押下することで、GPSモジュールから、ESPr Developerにデータ(緯度・経度・海抜のデータ)を取り込みます。その後、ESPr DeveloperのWiFiを経由して、Ambientに緯度・経度・海抜のデータを送信してます。
Ambientに、緯度・経度のデータを送信すると以下画像のように、マークが表示されます。地図データは拡大縮小可能です。
Ambientでは、チャート設定変更にて地図を選択しないと、地図データ、マークの表示は行われません。
また、d1~d8のいずれか一つを選択します。私の場合は日付指定も選択しました。
他にも、色々、情報がありますので参考にしてみてください。
以下動画は、電源投入後、GPSモジュール、ESPr DeveloperのWiFi接続・ソフトウェアシリアルの起動完了までを収めています。
USB接続電源と、電池電源の二種類の動画ですが、電池電源の方が、立ち上がりが遅いです。電池の容量不足と思われます。
以下動画は、テザリング用にブレッドボードを小さくし、LEDを赤に変更しています。スイッチ押下後のAmbientへのデータ送信終了時、LEDが点滅します。(スイッチ押下後、LED"消・点・消・点”となって、点灯状態を維持します)
下記画像は、近隣の公園周辺でテザリングを行なった結果を示します。
公園周辺を1周していますが、データが抜けているところがあります。衛星の位置・歩道の樹木等、原因は考えられますが、判断はできていません。(笑)
*** 次回は、別の方法でGPSロガーにチャレンジする予定です。 ***
(30) Arduino nano + GPSモジュール + SDカードモジュールによる、GPSロガーの動作確認
今回は、上の写真の通り、Arduino Nano + GPSモジュール + SDカードモジュールにて、GPSロガーを組み立てました。動作確認を長時間行うため、安全を考慮して、圧電素子のピッピ音にて確認できるようにしてあります。GPSモジュールの赤色LEDはGPS衛星から送られてくる、1秒間隔の信号に同期しているので、1秒間隔でフラッシュしますが、ロガーへのデータの書き込み(GPS衛星からのセンテンスの読み込み)は、5秒間隔にしてあります。正常書き込み時は、白色LEDがフラッシュ、書き込み失敗時は隣の赤色LEDはフラッシュします。圧電素子は、白色LEDに同期しています。
以下、ロガー書き込み中の動画です。
実際に自動車にロガーを載せて(助手席シート上に置いて)走ってみました。走った後、取れたデータをファイル変換してGoogle Earthで読み込ませてみました。以下がその結果です。(自身の位置情報を伏せるため、敢えて見づらくしてます)
時々休憩してます。Sの数だけ自動車から離れてます。(笑)
(31) Arduino pro mini + GPSモジュール + SDカードモジュールによる、GPSロガーの動作確認と、 QGISでのデータ確認
今回は、Arduino pro mini (3.3v 8MHz)を使用してGPSロガーを組み立てました。micro SD モジュールと、GPSモジュールは、前回同様です。写真右の通信用モジュールは、pro mini への5V供給に使ってます。(pro mini のRAW端子に5Vを供給します。pro mini と、GPSモジュールの通信線は、お互い3.3Ⅴ動作なので、コンバータは不要です。micro SDカードは、抜けた状態では赤色LEDが点灯。差し込めばロガースタートとなって、白色LEDの点滅に合わせて、ブザー音が出ます。それと同時に、データが micro SDカードに書き込まれます。
今回は、取得データを基に、QGISでデータ確認を行ないました。と、言っても単に緯度・経度データをプロットしただけですが。以下写真がQGISでのプロットの様子と、実際のロガーデータの一部になります。データは全部で2933個ありました。出発は愛媛県西条市、目的地は高知県の633美の里(道の駅)、そして、程野の滝です。途中途切れているところは、トンネルです。西条市側に近いところで途切れているところは、寒風山トンネル(旧・新)になります。
QGISでのロガーデータ表示 2 の下の途切れているところが高知県の633美の里(道の駅)です。そこから上に上がって、右に折れてデータが無くなっているところが程野の滝です。場所場所でラベルを付けることもできますが、今回は割愛させていただきました。
上の写真が、今回取得したロガーデータの一部です。左の一番上(欄外)に、地物数合計2933とあります。これが今回のデータの数です。
最後に今回のGPSロガーの動画(短いですが)をUPしておきます。micro SDカードが抜けている時は、赤色LEDが点灯。差し込むと白色LEDが点滅、同時にブザーも鳴ります。(動画では音声はありませんが)